
/*
*Released on 28th June 2008.
*Any violations can be reported at paritosh@wikiocean.net
*What is treated as violations can be found at www.wikiocean.net/ppl1-voilations*
******************************************************************************
* The contents of this file are subject to POOL Public License 1.0 and later.
* POOL Public License is based on Affero GPL v3 and additional conditions.
* ("License"); You may not use this file except in compliance with the License
* You may obtain a copy of the Affero GPL v3 License at http://www.gnu.org/licenses/agpl.html
* You may obtain a copy of the POOL Public License 1.0 or later at www.wikiocean.net/license/ppl.html
* Software distributed under POOL Public License 1.0 is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
* The Initial Developer of the Original Code is Paritosh Pungaliya (C) 2008. All Rights Reserved.
******************************************************************************
* Objective of the additional terms (license)
* 1) Is to extend the software freedom to freedom to work.
* 2) To ensure that knowledge is free from monopoly of agencies.
* 3) To avoid a situation where big corporate or investor can buy out free software groups and companies and then start milking the communities built around it.
* (this trend can be seen how the freedom is curtailed in companies that get Venture Capital funding.)
******************************************************************************
*/

package  basicprocess;

import java.util.Hashtable;
import java.util.Map;
import java.util.Vector;

import control.RequestParameter;



import utility.CapitalChar;
import utility.Input;

import database.RecordSearch;
import dbmanager.Column;
import dbmanager.DBManager;
import dbmanager.GetIdName;


public class  Basicprocess 
{
	DBManager database;
	Hashtable<Object, Object>Mastermap= new Hashtable<Object, Object>();
	Vector< Object>propertyVector = new Vector<Object>();
	String BASICPROCESS="basicprocess";
	String TYPE="type";
	GetIdName gid;
	RecordSearch sr;
	Object object;
	Vector<Object>processVector = new Vector<Object>();
	Basicprocessinterface process;
	Hashtable<Object, Object>Basichashtable =new Hashtable<Object, Object>();
	RequestParameter req;
	String type;
	String tablename;
	
	public Basicprocess() 
	{
	
	}
	
	public void Init()
	{
	 gid = new GetIdName();
	 BASICPROCESS = gid.getId(BASICPROCESS);
	 TYPE = gid.getId(TYPE);
	 sr =new RecordSearch();
	}
	
	public void setObject(Object object)
	{
		this.object =object;	
	}
	
	public void processBasicprocess()
	{
		Hashtable< Object, Object>table = new Hashtable<Object, Object>();
		table.put("pid",TYPE);
		table.put("pv",BASICPROCESS);
		table.put("td", "null");
		sr.setConditionMap(table);
		String line[]=sr.getArrayFromResultSet();
		for(int i=0;i<line.length;i++)
		{
			String splitstring[] = line[i].split("\t");
			String classname = splitstring[Column.mid_index-1];
			classname = gid.getItem(classname);			
			try 
			{
				Class C = Class.forName("basicprocess."+CapitalChar.makeFirstCharCapital(classname));
				process = (Basicprocessinterface)C.newInstance();
				process.Init();
				//process.setObject(object);
				process.setMasterHashtabel(Mastermap);
				process.setpropertydetailsVector(propertyVector);
				process.setRequestParameter(req);
				process.setType(type);
				process.setTablename(tablename);
				process.processBasicprocess(); 
				processVector.add(this);
				Basichashtable.putAll(process.getHashtable());
				if(Basichashtable.containsKey("ErrorInput"))
					break;
			}
			catch (ClassNotFoundException e) 
			{
				e.printStackTrace();
			}
			catch (InstantiationException e) 
			{
				e.printStackTrace();
			}
			catch (IllegalAccessException e) 
			{
				e.printStackTrace();
			}
			
		}
	}

	public Hashtable<Object, Object> getMasterHashtabel() 
	{
		return this.Mastermap;
	}

	public void setpropertydetailsVector(Vector<Object>  PropertyMap) 
	{
		 this.propertyVector.addAll(PropertyMap);
	}
	public  void setMasterHashtabel(Hashtable<Object, Object> MasterMap) 
	{
		 this.Mastermap.putAll(MasterMap);
	}

	public Vector<Object> getpropertydetailsVector() 
	{
		return this.propertyVector;
	}
	public void getInsert()
	{
		for(int i=0;i<processVector.size();i++)
		{
			Basicprocess basicprocess = (Basicprocess) processVector.get(i);
			basicprocess.process.getInsert();
		}
	}

	public void getUpdate()
	{
		for(int i=0;i<processVector.size();i++)
		{
			Basicprocess basicprocess = (Basicprocess) processVector.get(i);
			basicprocess.process.getUpdate();
		}
	}
	
	public Hashtable<Object, Object> getHashtable() 
	{	
		return Basichashtable;
	}
	public  void setRequestParameter(RequestParameter req)
	{
		this.req = req;
	}
	public  void setType(String type)
	{
		this.type = type;
	}
	public void setTablename(String tablename)
	{
		this.tablename = tablename;
	}
}
